home *** CD-ROM | disk | FTP | other *** search
- ;;; -*- Mode: Lisp; Package: Maxima; Syntax: Common-Lisp; Base: 10 -*- ;;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; The data in this file contains enhancments. ;;;;;
- ;;; ;;;;;
- ;;; Copyright (c) 1984,1987 by William Schelter,University of Texas ;;;;;
- ;;; All rights reserved ;;;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; (c) Copyright 1980 Massachusetts Institute of Technology ;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- (in-package "MAXIMA")
- (macsyma-module rzmac macro)
-
- ;;; *****************************************************************
- ;;; ***** MACROS ******* ASSORTED MACROS FOR GENERAL REPRESENTATION *
- ;;; *****************************************************************
-
- (defmacro repeat (index limit . body)
- `(do ((,index 0 (f1+ ,index)))
- ((not (< ,index ,limit))) . ,body))
-
- (defmacro logor (&rest frobs) `(boole boole-ior . ,frobs))
-
- (defmacro add-to-set (set frob)
- `((lambda (temp)
- (or (memq temp ,set)
- (setq ,set (cons temp ,set))))
- ,frob))
-
- #+ITS
- (defmacro compiling ()
- `(and (boundp 'compiler-state)
- (not (eq compiler-state 'toplevel))))
- #-ITS
- (defmacro compiling nil t)
-
-
- ;(defun *bind* macro (l)
- ;(macro *bind* (l)
- ; ((lambda (bindings body)
- ; (nconc (list 'do (mapcar (fn (q)
- ; (cond ((atom q)
- ; (list q))
- ; ((eq (cadr q) '|<-|)
- ; (list (car q) (caddr q)))
- ; (t q)))
- ; bindings)
- ; nil)
- ; (maplist (fn (x) (cond ((null (cdr x))
- ; (cons 'return x))
- ; ((car x))))
- ; body)))
- ; (cadr l) (cddr l)))
-
- (defmacro *bind* (bindings &body body)
- (nconc (list 'do (mapcar (fn (q)
- (cond ((atom q)
- (list q))
- ((eq (cadr q) '|<-|)
- (list (car q) (caddr q)))
- (t q)))
- bindings)
- '(nil))
- (maplist (fn (x) (cond ((null (cdr x))
- (cons 'return x))
- ((car x))))
- body)))
-
-
-
-
-
- (defmacro displace2 (form new-car new-cdr)
- `(rplaca (rplacd ,form ,new-cdr) ,new-car))
-
- ;; Returns the negation of VALUE if PREDICATE is true. Otherwise, just
- ;; returns VALUE.
-
- (defmacro negate-if (predicate value &aux (temp (gensym)))
- `(let ((,temp ,predicate))
- (cond (,temp (neg ,value))
- (t ,value))))
-
- (defmacro either (which first second)
- `(cond (,which ,first) (,second)))
-
- ;; Setq's the first variable to VALUE if SWITCH is true, and sets the second
- ;; variable otherwise.
-
- (defmacro set-either (first-var second-var switch value &aux (temp (gensym)))
- `(let ((,temp ,value))
- (cond (,switch (setq ,first-var ,temp))
- (t (setq ,second-var ,temp)))))
-
- #-cl ;;I could not find any callers of this thank god.
- (defmacro \* (&rest l) `(remainder . ,l))
-
-
- (comment Symbolic Arithmetic Macros)
-
- (defmacro m+ (&rest body) `(add* . ,body))
-
- (defmacro m* (&rest body) `(mul* . ,body))
-
- (defmacro m1+ (x) `(add* 1 ,x))
-
- (defmacro m1- (x) `(add* -1 ,x))
-
- (defmacro m// (a1 &optional (a2 nil 2args))
- (cond (2args `(div* ,a1 ,a2))
- (t `(inv* ,a1))))
-
- (defmacro m- (a1 &optional (a2 nil 2args))
- (cond (2args `(sub* ,a1 ,a2))
- (t `(mul* -1 ,a1))))
-
- (defmacro m^ (b e) `(power* ,b ,e))
-
- (defmacro m+l (l) `(addn ,l nil))
-
- (defmacro m*l (l) `(muln ,l nil))
-
- ;With
- (defmacro m+t (&rest body) `(add . ,body))
-
- (defmacro m*t (&rest body) `(mul . ,body))
-
- (defmacro m1+t (x) `(add 1 ,x))
-
- (defmacro m1-t (x) `(add -1 ,x))
-
- (defmacro m//t (a1 &optional (a2 nil 2args))
- (cond (2args `(div ,a1 ,a2))
- (t `(inv ,a1))))
-
- (defmacro m-t (a1 &optional (a2 nil 2args))
- (cond (2args `(sub ,a1 ,a2))
- (t `(neg ,a1))))
-
- (defmacro m^t (b e) `(power ,b ,e))
-
- (defmacro m+lt (l) `(addn ,l ,t))
-
- (defmacro m*lt (l) `(muln ,l ,t))
-